ICTSC2019 一次予選 問題解説: Openvpnが急に繋がらなくなった!

問題文  

自宅に置いてあるサーバ同士でOpenVPNを貼っていてある通信をOpenVPN越しにやりとりしていたのだが、 ある日突如通信ができなくなってしまった。この問題の原因を究明し、OpenVPNを利用して通信がまたできるようにしてほしい。

問題構成

  • OpenVPN Server:

    • OS: Ubuntu 18.04
    • SSH用IPアドレス: 192.168.0.10
    • SSHユーザ: admin
    • SSHパスワード: tP6xqe3f
    • パッケージ
      • OpenVPN 2.4.4
        • sudo systemctl status openvpn@server でデーモンの状態を確認できる
      • OpenSSL 1.1.1
      • PKI CAとして easyrsa3.0.6 を利用している
        • /easy-rsa-3.0.6 以下のディレクトリにある
        • CAのパスワードは ictsc-ca-pass で設定されている
  • OpenVPN Client:

    • OS: Vyos 1.1.8
    • SSH用IPアドレス: 192.168.0.20
    • SSHユーザ: admin
    • SSHパスワード: tP6xqe3g
  • 通信要件

    • OpenVPN Server/Client 共にeth1のインタフェースからトンネルを貼っている
    • OpenVPN Serverにはループバックインタフェース(172.25.0.1/32)があり、OpenVPN ClientはVPN越しにこのループバックのアドレスに通信ができること

問題のゴール状態  

OpenVPN ClientはVPN越しにこのOpenVPN Serverのループバックのアドレスに通信ができること

トラブルの概要  

証明書の期限が切れていて、通信ができなくなってる

解答例  

この問題ではまずなぜ通信ができなくなったかを確認する必要があります。 問題文には

ある日突如通信ができなくなってしまった

というところを見てヒントになったチームもあるかもしれません。 OpenVPN Serverの/var/log/openvpn/openvpn.logを参照すると下記のようなログが見えます。

Sun Jul 14 22:47:28 2019 192.168.200.20:57004 TLS: Initial packet from [AF_INET]192.168.200.20:57004, sid=672cf5a9 3ecb1b68
Sun Jul 14 22:47:28 2019 192.168.200.20:57004 VERIFY OK: depth=1, CN=Easy-RSA CA
Sun Jul 14 22:47:28 2019 192.168.200.20:57004 VERIFY ERROR: depth=0, error=certificate has expired: CN=vyos-user-4
Sun Jul 14 22:47:28 2019 192.168.200.20:57004 OpenSSL: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed

error=certificate has expired

とあるのでこのログを見て、証明書の期限が切れたとわかります。

証明書の期限が切れているので、新しく証明書を発行しOpenVPN Serverに新しく証明書を登録します。

  1. OpenVPN Serverにログインする
  2. 以下のコマンドを打つ

cd /easy-rsa-3.0.6/easyrsa3 ./easyrsa build-client-full vyos-client-2 nopass ictsc-ca-pass

  1. OpenVPN Clientにログインする
  2. 以下のコマンドを打つ

scp [email protected]:/easy-rsa-3.0.6/easyrsa3/pki/issued/vyos-client-2.crt ~/ scp [email protected]:/easy-rsa-3.0.6/easyrsa3/pki/private/vyos-client-2.key ~/ cp * /config/auth/ configure set interfaces openvpn vtun0 tls cert-file /config/auth/vyos-client-2.crt set interfaces openvpn vtun0 tls key-file /config/auth/vyos-client-2.key commit

  1. ping 172.25.0.1 を打って疎通を確認する。通ればOK